/**
 * Notes: OA项目对外API控制器
 * Date: 2025-05-01
 */

const CrossService = require('../service/cross_service.js');
const BaseController = require('./base_controller.js');

/**
 * OA项目对外API控制器
 */
class CrossController extends BaseController {
  /**
   * 获取用户信息
   */
  async getUserInfo() {
    // 获取请求参数
    const userId = this.getParameter('userId');

    // 调用服务
    const user = await CrossService.getUserInfo(userId);

    // 返回结果
    return this.success(user);
  }

  /**
   * 获取用户列表
   */
  async getUserList() {
    // 获取分页参数
    const page = this.getParameter('page', 1);
    const size = this.getParameter('size', 20);
    const department = this.getParameter('department');
    const keyword = this.getParameter('keyword');

    // 调用服务
    const result = await CrossService.getUserList({
      page,
      size,
      department,
      keyword
    });

    // 返回结果
    return this.success(result);
  }

  /**
   * 获取部门信息
   */
  async getDepartmentInfo() {
    // 获取请求参数
    const departmentId = this.getParameter('departmentId');

    // 调用服务
    const department = await CrossService.getDepartmentInfo(departmentId);

    // 返回结果
    return this.success(department);
  }

  /**
   * 获取部门列表
   */
  async getDepartmentList() {
    // 调用服务
    const departments = await CrossService.getDepartmentList();

    // 返回结果
    return this.success(departments);
  }

  /**
   * 获取流程信息
   */
  async getFlowInfo() {
    // 获取请求参数
    const flowId = this.getParameter('flowId');

    // 调用服务
    const flow = await CrossService.getFlowInfo(flowId);

    // 返回结果
    return this.success(flow);
  }

  /**
   * 创建审批
   */
  async createApproval() {
    // 获取请求参数
    const approvalData = this.getParameter('approvalData');

    // 参数检查
    if (!approvalData) {
      return this.error('审批数据不能为空');
    }

    // 调用服务
    const result = await CrossService.createApproval(approvalData);

    // 返回结果
    return this.success(result);
  }

  /**
   * 健康检查接口
   */
  async healthCheck() {
    // 返回健康状态
    return this.success({
      status: 'ok',
      service: 'OA Cross Service',
      timestamp: new Date().toISOString()
    });
  }
}

module.exports = CrossController; 